package com.example.tresenraya;

import java.util.ArrayList;

import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class Botones implements OnClickListener,
		android.view.View.OnClickListener {

	private int TurnoJugador = 0;
	private Controlador c = new Controlador();
	private ArrayList arrayBotones;
	private ArrayList arrayBotonesJuego;
	private int modo = 0;

	public void setArrayBotones(ArrayList arrayBotones) {
		this.arrayBotones = arrayBotones;
	}

	public void setArrayBotonesJuego(ArrayList arrayBotonesJuego) {
		this.arrayBotonesJuego = arrayBotonesJuego;
	}

	public void onClick(View v) {

		Button aux = (Button) v;
		this.jugarTurno(c.jugar(aux, arrayBotonesJuego), aux,
				this.getTurnoJugador());
	}

	public void jugarTurno(int valor, Button boton, int turno) {
		
		int maq = 0;
		if (valor == 1) {
			switch (modo) {
			// Jugador VS Jugador
			case 1:
				if (turno == 1) {
					boton.setText("X");
					boton.setEnabled(false);
					String x = c.comprobarGanador(arrayBotonesJuego, "X",
							maq);
					if (x.equalsIgnoreCase("Empate")
							&& !c.isTerminado(arrayBotonesJuego)) {
						this.setTurnoJugador(2);
					} else {
						this.terminarJuego(arrayBotones, arrayBotonesJuego);
					}
				}
				else if (turno == 2) {
					boton.setText("O");
					boton.setEnabled(false);
					String x = c.comprobarGanador(arrayBotonesJuego, "O",
							maq);
					if (x.equalsIgnoreCase("Empate")
							&& !c.isTerminado(arrayBotonesJuego)) {
						this.setTurnoJugador(1);
					} else {
						this.terminarJuego(arrayBotones, arrayBotonesJuego);
					}
				}
				break;
				
			// Jugador contra maquina
			case 2:
				boton.setText("X");
				boton.setEnabled(false);
				String x = c.comprobarGanador(arrayBotonesJuego, "X", maq);
				if (x.equalsIgnoreCase("Empate")
						&& !c.isTerminado(arrayBotonesJuego)) {
					this.setTurnoJugador(2);
				} else {
					this.terminarJuego(arrayBotones, arrayBotonesJuego);
				}
				if (!c.isTerminado(arrayBotonesJuego)) {
					c.turnoMaquina(arrayBotonesJuego);
					x = c.comprobarGanador(arrayBotonesJuego, "O",
							(maq + 1));
					if (x.equalsIgnoreCase("Empate")
							&& !c.isTerminado(arrayBotonesJuego)) {
						this.setTurnoJugador(1);
					} else {
						this.terminarJuego(arrayBotones, arrayBotonesJuego);
					}
				}

				break;
			}
		}

		else if (valor == 2) {
			this.setMetodoDeJuego(c.establecerMetodoDeJuego(arrayBotones));
			if (this.modo != 0) {
				if (turno == 0) {
					this.setTurnoJugador(1);
					this.comenzarJuego(arrayBotones, arrayBotonesJuego);
				} else {
					this.reiniciar();
				}
			} else {
			}
		}
		else if (valor == -1) {
			this.terminarJuego(arrayBotones, arrayBotonesJuego);
		}
		
	}

	public int getTurnoJugador() {
		return TurnoJugador;
	}

	public void setTurnoJugador(int turnoJugador) {
		TurnoJugador = turnoJugador;
	}

	public void terminarJuego(ArrayList arr, ArrayList botonera) {
		Button empezar = (Button) arr.get(0);
		empezar.setEnabled(true);
		RadioGroup radios = (RadioGroup) arr.get(1);
		radios.setEnabled(true);
		RadioButton solo = (RadioButton) arr.get(2);
		solo.setEnabled(true);
		RadioButton coop = (RadioButton) arr.get(3);
		coop.setEnabled(true);

		for (int i = 0; i < botonera.size(); i++) {
			Button aux = (Button) botonera.get(i);
			aux.setEnabled(false);
		}
		this.setMetodoDeJuego(0);
	}

	public void comenzarJuego(ArrayList arr, ArrayList botonera) {

		Button go = (Button) arr.get(0);
		go.setEnabled(false);
		RadioGroup rg = (RadioGroup) arr.get(1);
		rg.setEnabled(false);
		RadioButton r1 = (RadioButton) arr.get(2);
		r1.setEnabled(false);
		RadioButton r2 = (RadioButton) arr.get(3);
		r2.setEnabled(false);

		for (int i = 0; i < botonera.size(); i++) {
			Button aux = (Button) botonera.get(i);
			aux.setEnabled(true);
		}
	}

	public void reiniciar() {

		for (int i = 0; i < this.arrayBotonesJuego.size(); i++) {
			Button aux = (Button) this.arrayBotonesJuego.get(i);
			aux.setText(" ");
		}
		this.setTurnoJugador(1);
		this.comenzarJuego(arrayBotones, arrayBotonesJuego);
	}

	public int getMetodoDeJuego() {
		return modo;
	}

	public void setMetodoDeJuego(int metodoDeJuego) {
		this.modo = metodoDeJuego;
	}

	@Override
	public void onClick(DialogInterface dialog, int which) {
		// TODO Auto-generated method stub

	}

}
